package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2022-01-05 11:01
 * @description: Functions of this class is
 * 官方题解（堆排序）：
 * cclass Solution {
 *     public int[] topKFrequent(int[] nums, int k) {
 *         HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
 *         //遍历一遍存储好频率
 *         for(int num:nums){
 *             map.put(num,map.getOrDefault(num,0)+1);
 *         }
 *         //使用一个优先队列实现一个小顶堆
 *         PriorityQueue<int[]> queue=new PriorityQueue<int[]>(new Comparator<int[]>(){
 *             public int compare(int[] m1,int[] m2){
 *                 return m1[1]-m2[1];//数组中第一个位置存的是元素，第二个位置存的是元素的出现频率
 *             }
 *         });
 *         for(Map.Entry<Integer,Integer> entry:map.entrySet()){
 *             int num=entry.getKey();
 *             int count=entry.getValue();
 *             if(queue.size()==k){
 *                 //个数已经达到k个了
 *                 if(queue.peek()[1]<count){
 *                     //但是如果当前出现有出现频率更大的元素，那就应该让他进入小顶堆，让堆顶元素（当前出现次数频率最小的）出去，
 *                     //然后让这个出现频率更大的进来小顶堆
 *                     queue.poll();
 *                     queue.offer(new int[]{num,count});
 *                 }
 *             }
 *             else{
 *                 //否则直接入小顶堆
 *                queue.offer(new int[]{num,count});
 *             }
 *         }
 *         int ans[]=new int[k];
 *         for(int i=0;i<k;i++){
 *             //然后把最终的元素存入答案数组并返回
 *             ans[i]=queue.poll()[0];
 *         }
 *         return ans;
 *     }
 * }
 *
 **/
public class NoNoNo前k个高频元素 {
    public static void main(String[] args) {

    }
}